import axios from 'axios'
import store from '@/store'
import { TIMEOUT } from '@/config/site'

const instance = axios.create({
  timeout: TIMEOUT
})

const delay = (ms = 1000) =>
  new Promise(resolve => {
    setTimeout(resolve, ms)
  })


// 响应拦截器
instance.interceptors.response.use(
  res => res.data,
  err => {
    // 统一错误处理
    return Promise.reject(err)
  }
)

// 请求拦截器
// instance.interceptors.request.use(
//   config => {
//     config.url = config.url.replace('#cityid#', store.getters.cityid)

//     return config
//   },
//   err => Promise.reject(err)
// )

/**
 * 进行get请求
 * @param {string} url 请求的url地址，如果请求地址中有域名，则不会走代理
 * @param {json} config 设置请求头额外信息
 * @returns Promise
 */
export const get = (url, config = {}) => instance.get(url, config)

/**
 * 进行post请求
 * @param {string} url 请求的url地址，如果请求地址中有域名，则不会走代理
 * @param {json|FormData} data 请求体数据
 * @param {json} config 设置请求头额外信息
 * @returns Promise
 */
export const post = (url, data = {}, config = {}) => instance.post(url, data, config)

// 网络重发
export const reloadRequest = (promseFn, tryNum = 3) => {
  return new Promise(async (resolve, reject) => {
    while (tryNum--) {
      try {
        let ret = await promseFn()
        resolve(ret)
        break
      } catch (error) {
        if (tryNum > 0) {
          // 可以等一会再继续发，一般情况下，可以是 1s 2s 5s
          await delay()
        }
        if (tryNum <= 0) {
          reject('重发也是失败的')
          break
        }
      }
    }
  })
}